/**
 ******************************************************************************
 * @file	backlight.c
 * @brief	libotdr-peripheral.so
 *
 * Copyright (C) 2017 桂林聚联科技有限公司, Inc. All Rights Reserved.
 *
 * @section Depend
 *	-# spi_mxs.ko
 *	-# spidev.ko
 *	-# libfpga-2016.so
 *
 * 2016-10-21,MenglongWu,MenglongWoo@aliyun.com
 */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <printl.h>

#include "proginfo.h"
#include "otdr-peripheral.h"

#define OTDR_DBG_LEVEL 1
#ifdef NDEBUG
#define this_dbg(fmt, ...)
#else
#define this_dbg(fmt, ...) PRINTL(OTDR_DBG_LEVEL, C_DEBUG fmt C_NORMAL, ##__VA_ARGS__)
#endif

#define DEVICE_DEF_NAME "/sys/class/backlight/mxs-bl/"

static char *device = DEVICE_DEF_NAME;

static void __attribute__((constructor)) _load_env()
{
    char *env = NULL;
    env       = getenv("DEVICE_BACKLIGHT");
    if (0) {
	device = DEVICE_DEF_NAME;
    }
}


/**
 * @brief	屏幕亮度控制模块接口
 * @param	brightness，亮度值。0~100，0是最暗，100最亮。
 * @retval	0成功，-1失败。
 * @remarks
 * @see
 */

int sys_setLCDBrightness(int brightness)
{
    char  strcmd[64];
    FILE *fp;
    snprintf(strcmd, sizeof(strcmd), "%s/brightness", device);

    // __attribute__((unused)) int ret =  system(strcmd);

    fp = fopen(strcmd, "w");
    if (fp == NULL) {
	printf("%s() %d:fail open file %s\n", __FUNCTION__, __LINE__, strcmd);
	perror("");
	return -1;
    }
    fprintf(fp, "%d", brightness);
    fclose(fp);
    return 0;
}

/**
 * @brief	设置背光持续时间
 * @param	backlightTime,时间值，单位为秒。例如backlightTime等于10，
 屏幕背光持续10秒后进入节能状态。
 * @retval	0成功，-1失败。
 * @remarks
 节能状态是完全关闭背光或背光处于一种很暗的状态（如10%）取决于用户需求。
 * @see
 */

int sys_setBacklightTime(int backlightTime)
{
    int  fd_tmout;
    char strout[128];
    int  last_tm;
    char strtm[10];

    int ret;


    snprintf(strout, sizeof(strout), "%s/timeout", device);
    fd_tmout = open((char *)strout, O_WRONLY);
    last_tm  = atoi(strtm);
    snprintf(strtm, sizeof(strtm), "%d", backlightTime);
    lseek(fd_tmout, 0, SEEK_SET);
    ret = write(fd_tmout, strtm, strlen(strtm));
    close(fd_tmout);
    return 0;
}

/**
 * @brief	设置背光永久保持不会进入节能状态
 如果在背光永久保持状态时使用setBacklightTime设置了背光持续时间，
 则自动取消背光永久保持状态而按照setBacklightTime所设置的时间执行。
 * @retval	null
 */

int sys_setBacklightAlwaysOn()
{
    setBacklightTime(0);
    return 0;
}


#ifdef PRJ_NAME
MODULE_PROJECT(PRJ_NAME);
#endif
#if defined(PRJ_VERSION) && defined(PRJ_PATCHLEVEL) && defined(PRJ_SUBLEVEL)
MODULE_VERSION(PRJ_VERSION "." PRJ_PATCHLEVEL "." PRJ_SUBLEVEL);
#endif

MODULE_BUILD(__DATE__ " " __TIME__);
#if defined(GLINK_TR600_BOARD)
MODULE_DESCRIPTION("Board: TR600-Plus");
#endif
#if defined(CONFIG_GLINK_TR700_BOARD)
MODULE_DEPEND("Board: TR700");
#endif
PROG_GITSHA1(__GIT_SHA1__);
